package util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.mina.core.session.IoSession;


/**
 * 
 * @author 胡海亮  QQ:249782944
 * 学校:中南大学 商学院
 * EnterpriseIMServer :企业即时通讯
 * May 4, 2010
 * 
 * 单例模式
 * 
 * 服务器的缓存组件，存放常用的数据。
 * 1: 要解决的问题:如何制定数据的前置规制，守护及维护数据
 * 2: 当数据量大的时候如何应对？
 * 3: 系统刚刚开始使用的是模拟数据生成
 */
public class ServerCache {

	private static ServerCache instance;
	
	private Map<String, IoSession> userConnectMap;                     //所有在线的用户的连接
	private Map<Long, String> onLineUserMap;                          //缓存在线的用户 
	private Map<Long, String> idMap;                          //缓存在线的用户 
	private static int onlineNum = 0;
	
	private void initUserConnectMap(){
		userConnectMap=new HashMap<String, IoSession>();
	}
	
	/**
	 * 把某个用户的连接对象加入服务器的连接对象map
	 * @param owerID:此会话的用户者的QQ号
	 * @param userConnect:此会话的用户连接对象
	 */
	public void addUserConnect(String owerID,IoSession userConnect){
		if(null==userConnectMap){
			userConnectMap=new HashMap<String, IoSession>();
		}
		userConnectMap.put(owerID, userConnect);
	}
	
	/**
	 * 把用户的连接对象移除服务器的连接对象map
	 * @param owerID:此会话的用户者的ID号
	 */
	public void removeUserConnect (String owerID){
		userConnectMap.remove(owerID);
	}
	
	public Map<String, IoSession> getUserConnectMap() {
		return userConnectMap;
	}

	public void setUserConnectMap(Map<String, IoSession> userConnectMap) {
		this.userConnectMap = userConnectMap;
	}

	
	private ServerCache(){
		this.initServerCache();
	}

	public static ServerCache getInstance() {
		if(instance==null){
			//EIMLogger.INFO("正在初始化服务器的缓存组件....");
			instance=new ServerCache();
		}
		return instance;
	}
	
	private void initServerCache(){
		initUserConnectMap();
		initOnLineUserMap();
		initIdMap();
	}
	
	/**
	 * 初始化在线用户信息缓存对象
	 */
	private void initOnLineUserMap(){
		onLineUserMap=new HashMap<Long, String> ();
	}
	public Map<Long, String> getOnLineUserMap() {
		return onLineUserMap;
	}

	public void setOnLineUserMap(Map<Long, String> onLineUserMap) {
		this.onLineUserMap = onLineUserMap;
	}
	/**
     * 将某个登入成功的用户添加到在线用户列表中
     * @param user:成功登入的用户
     */
	public void addUserToOnLineList(Long owerID,String userid){
		onLineUserMap.put(owerID, userid);
	}
	
	/**
	 * 将某个下线或掉线的用户移除在线用户列表中
	 * @param user：下线的用户
	 */
	public void removeUserFromeOnlineList(Long owerID){
		onLineUserMap.remove(owerID);
	}
	
	
	
	
	private void initIdMap(){
		idMap=new HashMap<Long, String>();
	}
	
	/**
	 * 把某个用户的连接对象加入服务器的连接对象map
	 * @param owerID:此会话的用户者的QQ号
	 * @param userConnect:此会话的用户连接对象
	 */
	public void addIdMap(Long session_id,String id){
		if(null==idMap){
			idMap=new HashMap<Long,String>();
		}
		idMap.put(session_id, id);
	}
	
	/**
	 * 把用户的连接对象移除服务器的连接对象map
	 * @param owerID:此会话的用户者的ID号
	 */
	public void removeIdMap (Long session_id){
		idMap.remove(session_id);
	}
	
	public Map<Long,String> getIdMap() {
		return idMap;
	}

	public void setIdMap(Map<Long,String> idMap) {
		this.idMap = idMap;
	}
	
	
	
	public int getOnlineNum() {
		return onlineNum;
	}
	public void setOnlineNum(int onlineNum) {
		this.onlineNum = onlineNum;
	}
	
}
